//package com.example.network.config;
//
//import com.auth0.jwt.JWT;
//import com.auth0.jwt.JWTVerifier;
//import com.auth0.jwt.algorithms.Algorithm;
//import com.auth0.jwt.exceptions.JWTVerificationException;
//import com.example.network.exception.ServiceException;
//import com.example.network.model.entity.User;
//import com.example.network.service.UserService;
//import com.github.xiaoymin.knife4j.core.util.StrUtil;
//import jakarta.annotation.Resource;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.HandlerInterceptor;
//
////拦截器
//@Component
//@Slf4j
//public class JwtInterceptor implements HandlerInterceptor {
//
//    private static final String ERROR_CODE_401 = "401";
//
//    @Resource
//    private UserService userService;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String token = request.getHeader("token");
//        if (StrUtil.isBlank(token)) {
//            token = request.getParameter("token");
//        }
//
//        // 执行认证
//        if (StrUtil.isBlank(token)) {
//            throw new ServiceException(ERROR_CODE_401);
//        }
//        // 获取 token 中的userId
//        String userId;
//        User user;
//        try {
//            userId = JWT.decode(token).getAudience().get(0);
//            // 根据token中的userid查询数据库
//            user = userService.getById(Integer.parseInt(userId));
//        } catch (Exception e) {
//            String errMsg = "token验证失败，请重新登录";
//            log.error(errMsg + ", token=" + token, e);
//            throw new ServiceException(ERROR_CODE_401);
//        }
//        if (user == null) {
//            throw new ServiceException(ERROR_CODE_401);
//        }
//
//        try {
//            // 用户密码加签验证 token
//            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
//            jwtVerifier.verify(token); // 验证token
//        } catch (JWTVerificationException e) {
//            throw new ServiceException(ERROR_CODE_401);
//        }
//        return true;
//    }
//
//}
//
